虚假唤醒:在并发编程中,线程在等待(如 wait()、条件变量 cond_wait 等)时,没有收到明确的通知/信号也没有满足条件,却意外地从等待状态返回的现象。因此等待代码通常需要用“循环检查条件”来防御。
/ˈspjʊriəs ˈweɪkʌp/
A spurious wakeup can happen even if no one calls notify.
即使没有任何线程调用 notify,也可能发生虚假唤醒。
Because of spurious wakeups, the thread waits in a loop and rechecks the condition before continuing.
由于可能出现虚假唤醒,线程会在循环中等待,并在继续执行前重新检查条件是否成立。
spurious 源自拉丁语 spurius,有“假的、伪的、非真正原因导致的”之意;wakeup 来自动词短语 wake up(醒来、唤醒)。合起来表示“并非由真实信号触发的唤醒”。